<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>

</body>
<script>
  let name = '张三'  //定义的变量不会绑定在window上
  let obj = {
    name: '李斯',
    // show:function() {   //obj.show()  李斯
    //   console.log(this.name)
    // },
    show: () => { //在定义箭头函数的时候，this已经锁死了(从当前的上下文中获取)  指向window,就算是使用bind也不能改变this指向
      console.log(this)  //作为方法的箭头函数this指向全局window对象， 而普通函数则指向调用它的对象
      console.log(this.name)
    },
  }

  // obj.show()
  // let show = obj.show.bind(obj)
  // show()
  // if (!("a" in window)) {
  //   var a = 1;   // 这里会有变量的提升
  //   console.log(888)
  // }
  // alert(a)


  let bbb = function () {
    this.a = '我是bbb'
    this.c = () => {  //  当这个函数被定义的时候，这个this会从当前的上下文中获取，而且会一直都是指向当前的上下文 不会改变
      console.log(this.a)
    }
  }

  let ddd = new bbb()
  let mmm = ddd.c
  mmm()


  var ceshi = function () {
    return new Promise((res, rej) => {
      setTimeout(() => {
        try {
          aaa()
        } catch (error) {
          rej(error)
          // throw new Error(error)
        }
      }, 1000);
    });
  };

  // async function deal() {
  //   try {
  //     var aaa = await ceshi();
  //     console.log(aaa);
  //   } catch (err) {
  //     console.log(err);
  //   }
  // }
  // deal();
  try {
    ceshi().then(res => {
      console.log(res)
    }).catch((err) => {
      console.log(err)
    })
  } catch (err) {
    console.log(err)
  }

</script>

</html>